////////////////////////////////////////////////////////////////////////
// Last svn revision: $Id:  $ 
////////////////////////////////////////////////////////////////////////
/// \class drow::Test::ATestClass
///
/// \brief   
///
/// \author Olivia Wasalski 		<oliviawasalski@triumf.ca>
///
/// REVISION HISTORY:\n
/// 	22/03/12 : Olivia Wasalski - New File \n
///   24/03/12 : Douglas Richardson - Added assert functions
///
/// \details 	
///
////////////////////////////////////////////////////////////////////////

#ifndef __drow_test_ATestClass__
#define __drow_test_ATestClass__

#include <map>
#include <string>
#include <functional>

namespace drow {
namespace test {

class ATestClass {
	
public:
	ATestClass(const std::string& name);
	virtual ~ATestClass() {}
	virtual void TestClass() = 0;
	static void Test();

private:
	static void CreateTestClasses();
	static void TestAllClasses();

	static std::map<std::string, ATestClass*> fClasses;
	
protected:
	void AssertTrue(const bool b, const int line);
	void AssertEquality(const double d0, const double d1, const int line);
	void AssertFailure(const std::function<void()> func, const int line);
};

} // test
} // drow

#endif // __drow_test_ATestClass__

